#include "httplib.h"  // 引入httplib库，用于创建HTTP服务器
#include <iostream>   // 引入标准输入输出库

// 处理"/hi"路径的请求处理函数
void Hello(const httplib::Request &req, httplib::Response &rsp)
{
  rsp.set_content("Hello World!", "Text.plain");  // 设置响应内容为"Hello World!"
  rsp.status = 200;                              // 设置HTTP状态码为200(成功)
}

int main()
{
  httplib::Server server;  // 创建HTTP服务器实例

  // 注册GET方法路由"/hi"，使用Hello函数处理请求
  server.Get("/hi", Hello);
  
  // 注册带正则表达式的GET路由，匹配如"/numbers/123"的路径
  // R"(...)"是原始字符串语法，避免转义字符干扰
  server.Get(R"(/numbers/(\d+))", 
      [&](const httplib::Request& req, httplib::Response& res)
      {
        auto numbers = req.matches[1];  // 从URL中提取匹配的数字
        res.set_content(numbers, "text/plain");  // 将数字作为纯文本返回
      });
  
  // 注册POST方法路由，用于文件上传
  server.Post("/upload",
  [&](const httplib::Request &req, httplib::Response& res)
  {
    auto size = req.files.size();  // 获取上传文件的数量
    auto ret = req.has_file("file1");  // 检查是否有名为"file1"的文件
    
    // 获取名为"file1"的上传文件
    const auto& file = req.get_file_value("file1");
    std::cout << file.filename << std::endl;    // 打印文件名
    std::cout << file.content_type << std::endl;// 打印文件类型
    std::cout << file.content << std::endl;    // 打印文件内容
  });
 
  // 启动服务器，监听所有网络接口(0.0.0.0)的8888端口
  server.listen("0.0.0.0", 8888);
  
  return 0;
}